home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / cutils.arc / SCREEN.ASM < prev    next >
Assembly Source File  |  1985-08-30  |  8KB  |  222 lines

  1.                                 TITLE   Screen Subroutines for Lattice
  2.                                 NAME    SCREEN
  3.                                 INCLUDE DOS.MAC
  4.  
  5. COMMENT *
  6.                 AUTHOR          Jon Wesener
  7.                 DATE            7 / 9 / 85
  8.                 PURPOSE            These routines are to be used for
  9.                                 controlling the display.
  10.         *
  11.  
  12.                 DSEG
  13. scr_map         dw      0b800h          ; page 1
  14.                 dw      0b800h + 250    ; page 2
  15.                 dw      0b800h + 500    ; page 3
  16.                 dw      0b800h + 750    ; page 4
  17.                 ENDDS
  18.  
  19.                 PSEG
  20.                 PUBLIC  ATPUTS, CLS, CUR_ON, CUR_OFF, SET_CUR, ATPUTC
  21.                 PUBLIC  SCRL_UP, SCRL_DWN, SET_PAGE, SET_MODE
  22.  
  23. ; atputs will put a string with an attribute at the specified cursor position
  24. ;  atputs(string, page, row, col, attr)
  25. ; RETURN: nothing
  26.  
  27. ATPUTS          PROC    NEAR
  28.                 push    bp
  29.                 mov     bp, sp
  30.                 mov     bx, [bp+6]      ; get page ptr
  31.                 shl     bx, 1           ; convert to table arg
  32.                 mov     es, scr_map[bx] ; get screen segment
  33.                 mov     ax, [bp+8]      ; get row
  34.                 mov     cl, 80          ; 80 characters per column
  35.                 mul     cl              ; figure row offset into page
  36.                 add     ax, [bp+10]     ; add the column offset
  37.                 shl     ax, 1           ; adjust for attribute bytes
  38.                 mov     di, ax          ; destination
  39.                 mov     ah, [bp+12]     ; get attribute
  40.                 mov     si, [bp+4]      ; get string
  41. atl1:           lodsb
  42.                 and     al, al          ; is it the end ?
  43.                 jz      atex1           ; yes
  44.                 stosw                   ; write it to the screen
  45.                 jmp     atl1
  46. atex1:          push    ds
  47.                 pop     es              ; reset the extra segment
  48.                 pop     bp
  49.                 ret
  50. ATPUTS          ENDP
  51.  
  52. ; atputc puts a character with the given attribute on the screen
  53. ;  atputc(character, page, row, col, attr)
  54. ; RETURN: nothing
  55.  
  56. ATPUTC          PROC    NEAR
  57.                 push    bp
  58.                 mov     bp, sp
  59.                 mov     bx, [bp+6]      ; get page ptr
  60.                 shl     bx, 1           ; convert to table arg
  61.                 mov     es, scr_map[bx] ; get screen segment
  62.                 mov     ax, [bp+8]      ; get row
  63.                 mov     cl, 80          ; 80 characters per column
  64.                 mul     cl              ; figure row offset into page
  65.                 add     ax, [bp+10]     ; add the column offset
  66.                 shl     ax, 1           ; adjust for attribute bytes
  67.                 mov     di, ax          ; destination
  68.                 mov     ax, [bp+4]      ; get character
  69.                 mov     ah, [bp+12]     ; get attribute
  70.                 stosw                   ; write it to the screen
  71. atex:           push    ds
  72.                 pop     es              ; restore extra segment
  73.                 pop     bp
  74.                 ret
  75. ATPUTC          ENDP
  76.  
  77. ; CLS clears the requested page in 80X25 mode.
  78. ;  cls(page);
  79. ; RETURN: nothing- if it does return.
  80.  
  81.  
  82. ; SET_CUR sets the cursor of the requested page.
  83. ;  set_cur(row, column, page)
  84. ; RETURN: nothing
  85.  
  86. SET_CUR         PROC    NEAR
  87.                 push    bp
  88.                 mov     bp, sp
  89.                 mov     ax, 200h        ; set cursor
  90.                 mov     bx, [bp+8]      ; get page
  91.                 mov     dx, [bp+6]      ; get column
  92.                 mov     dh, [bp+4]      ; get row
  93.                 int     10h             ; change it
  94.                 pop     bp
  95.                 ret
  96. SET_CUR         ENDP
  97.  
  98. ; CUR_ON turns the cursor on.
  99. ;  cur_on()
  100. ; RETURN: nothing
  101.  
  102. CUR_ON          PROC    NEAR
  103.                 push    bp
  104.                 mov     ax, 100h        ; set cur type
  105.                 mov     cx, 607h        ; last two rows
  106.                 int     10h             ; change it
  107.                 pop     bp
  108.                 ret
  109. CUR_ON          ENDP
  110.  
  111. ; Cur_off turns the cursor off
  112. ;  cur_off()
  113. ; RETURN: nothing
  114.  
  115. CUR_OFF         PROC    NEAR
  116.                 push    bp
  117.                 mov     ax, 100h        ; set cur type
  118.                 mov     cx, 0f00h       ; this should turn it off
  119.                 int     10h
  120.                 pop     bp
  121.                 ret
  122. CUR_OFF         ENDP
  123.  
  124. ; Set_mode sets the video controller to the desired mode.
  125. ;  set_mode(mode)
  126. ; RETURNS: nothing
  127.  
  128. ; valid modes are 0 - 7
  129. ;               0=      40X25 BW
  130. ;               1=      40X25 Color
  131. ;               2=      80X25 BW
  132. ;               3=      80X25 Color
  133. ;               4=      320X200 Color           GRAPHICS **
  134. ;               5=      320X200 BW              GRAPHICS **
  135. ;               6=      640X200 BW              GRAPHICS **
  136. ;               7=      80X25 BW (internal card)
  137.  
  138. SET_MODE        PROC    NEAR
  139.                 push    bp
  140.                 mov     bp, sp
  141.                 mov     ax, [bp+4]      ; set the graphics mode
  142.                 int     10h             ; now !
  143.                 pop     bp
  144.                 ret
  145. SET_MODE        ENDP
  146.  
  147. CLS             PROC    NEAR
  148.                 push    bp              ;save from video call
  149. ; get screen info
  150.                 mov     ax, 0f00h
  151.                 int     10h
  152. ; clear screen
  153.                 dec     ah              ; columns -1
  154.                 mov     dl, ah
  155.                 mov     dh, 24          ; rows - 1
  156.                 mov     ax, 600h        ;ask for a clear window
  157.                 xor     cx, cx          ;start at 0,0
  158.                 mov     bh, 7           ;attributes for new blanks
  159.                 int     10h             ;do the clear
  160. ; home cursor
  161.                 xor     dx, dx          ; column & row = (0,0)
  162.                 xor     bx, bx          ; force page zero
  163.                 mov     ax, 200h        ; set cursor location
  164.                 int     10h             ; call bios
  165.                 pop     bp
  166.                 ret
  167. CLS             ENDP
  168.  
  169. ; scrl_up will scroll the active screen page up
  170. ;  scrl_up(no_lines, urow, ucol, drow, dcol, battr);
  171. ; RETURN: nothing
  172.  
  173. SCRL_UP         PROC    NEAR
  174.                 push    bp
  175.                 mov     bp, sp
  176.                 mov     ax, [bp+4]      ; get the number of lines
  177.                 mov     ah, 6           ; screen scroll function
  178.                 mov     cx, [bp+8]      ; get upper left column
  179.                 mov     ch, [bp+6]      ; get upper left row
  180.                 mov     dx, [bp+12]     ; get lower right column
  181.                 mov     dh, [bp+10]     ; get lower right row
  182.                 mov     bx, [bp+14]     ; get blank line attribute
  183.                 int     10h             ; do it
  184.                 pop     bp
  185.                 ret
  186. SCRL_UP         ENDP
  187.  
  188. ; scrl_dwn will scroll the active screen page down
  189. ;  scrl_dwn(no_lines, urow, ucol, drow, dcol, battr);
  190. ; RETURN: nothing
  191.  
  192. SCRL_DWN        PROC    NEAR
  193.                 push    bp
  194.                 mov     bp, sp
  195.                 mov     ax, [bp+4]      ; get the number of lines
  196.                 mov     ah, 7           ; screen scroll function
  197.                 mov     cx, [bp+8]      ; get upper left column
  198.                 mov     ch, [bp+6]      ; get upper left row
  199.                 mov     dx, [bp+12]     ; get lower right column
  200.                 mov     dh, [bp+10]     ; get lower right row
  201.                 mov     bx, [bp+14]     ; get blank line attribute
  202.                 int     10h             ; do it
  203.                 pop     bp
  204.                 ret
  205. SCRL_DWN        ENDP
  206.  
  207. ; set_page sets the current displayed page
  208. ;  set_page(page)
  209. ; RETURN: nothing
  210.  
  211. SET_PAGE        PROC    NEAR
  212.                 push    bp
  213.                 mov     bp, sp
  214.                 mov     ax, [bp+4]      ; get the page
  215.                 mov     ah, 5           ; screen function to set page
  216.                 int     10h
  217.                 pop     bp
  218.                 ret
  219. SET_PAGE        ENDP
  220.                 ENDPS
  221.                 END
  222.